home *** CD-ROM | disk | FTP | other *** search
/ QuickTime 2.0 Developer Kit / QuickTime 2.0 Developer Kit.iso / mac / MAC / Programming Stuff / Sample Code / Mixed Bag / Sample Components / PreviewPICS.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-06-23  |  3.4 KB  |  123 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        PreviewPICS.r
  3.  
  4.     Written by:    Peter Hoddie
  5.  
  6.     Copyright:    © 1992 by Apple Computer, Inc., all rights reserved.
  7.  
  8. */
  9.  
  10. #include <Aliases.h>
  11. #include <Errors.h>
  12. #include <QuickDraw.h>
  13. #include <Resources.h>
  14.  
  15. #include <Components.h>
  16. #include <QuickTimeComponents.h>
  17.  
  18. typedef struct {
  19.     ComponentInstance    self;
  20. } PICSPreviewRecord, **PICSPreviewGlobals;
  21.  
  22. pascal ComponentResult PICSPreviewDispatch( ComponentParameters *params, Handle store );
  23. pascal ComponentResult PICSPreviewOpen(PICSPreviewGlobals store, ComponentInstance self);
  24. pascal ComponentResult PICSPreviewClose(PICSPreviewGlobals store, ComponentInstance self);
  25. pascal ComponentResult PICSPreviewCanDo( PICSPreviewGlobals store, short ftnNumber );
  26. pascal ComponentResult PICSPreviewVersion( PICSPreviewGlobals store );
  27. pascal ComponentResult PICSPreviewShowData(PICSPreviewGlobals store, OSType dataType, 
  28.                 Handle data, const Rect *inHere);
  29.  
  30. // entry point for all Component Manager requests
  31. pascal ComponentResult PICSPreviewDispatch( ComponentParameters *params, Handle store )
  32. {
  33.     OSErr err = badComponentSelector;
  34.     ComponentFunction componentProc = 0;
  35.  
  36.     switch (params->what) {
  37.         case kComponentOpenSelect: componentProc = PICSPreviewOpen; break;
  38.         case kComponentCloseSelect: componentProc = PICSPreviewClose; break;
  39.         case kComponentCanDoSelect: componentProc = PICSPreviewCanDo; break;
  40.         case kComponentVersionSelect: componentProc = PICSPreviewVersion; break;
  41.         case kPreviewShowDataSelector: componentProc = PICSPreviewShowData; break;
  42.     }
  43.  
  44.     if (componentProc)
  45.         err = CallComponentFunctionWithStorage(store, params, componentProc);
  46.  
  47.     return err;
  48. }
  49.  
  50. pascal ComponentResult PICSPreviewCanDo( PICSPreviewGlobals store, short ftnNumber )
  51. {
  52.     switch (ftnNumber) {
  53.         case kComponentOpenSelect:
  54.         case kComponentCloseSelect:
  55.         case kComponentCanDoSelect:
  56.         case kComponentVersionSelect:
  57.         case kPreviewShowDataSelector:
  58.             return true;
  59.         default:
  60.             return false;
  61.     }
  62. }
  63.  
  64. pascal ComponentResult PICSPreviewVersion( PICSPreviewGlobals store )
  65. {
  66.     return 0x00010001;
  67. }
  68.  
  69. pascal ComponentResult PICSPreviewOpen(PICSPreviewGlobals store, ComponentInstance self)
  70. {
  71.     store = (PICSPreviewGlobals)NewHandle(sizeof(PICSPreviewRecord));
  72.     if (!store) return MemError();
  73.     SetComponentInstanceStorage(self, (Handle)store);
  74.     (**store).self = self;
  75.  
  76.     return noErr;
  77. }
  78.  
  79. pascal ComponentResult PICSPreviewClose(PICSPreviewGlobals store, ComponentInstance self)
  80. {
  81.     if (store) DisposeHandle((Handle)store);
  82.     return noErr;
  83. }
  84.  
  85. pascal ComponentResult PICSPreviewShowData(PICSPreviewGlobals store, OSType dataType, 
  86.                 Handle data, const Rect *inHere)
  87. {
  88.     OSErr err = noErr;
  89.     short resRef = 0, saveRes = CurResFile();
  90.     FSSpec theFile;
  91.     Boolean whoCares;
  92.     Handle thePict = nil;
  93.     ComponentInstance ci;
  94.  
  95.     // because our Component has the pnotComponentNeedsNoCache flag set, we should
  96.     //    only be called to display files.
  97.     if (dataType != rAliasType)
  98.         return paramErr;
  99.  
  100.     // open up the file to preview
  101.     if (err = ResolveAlias(nil, (AliasHandle)data, &theFile, &whoCares)) goto bail;
  102.     resRef = FSpOpenResFile(&theFile, fsRdPerm);
  103.     if (err = ResError()) goto bail;
  104.  
  105.     // get the first PICT
  106.     UseResFile(resRef);
  107.     thePict = Get1IndResource('PICT', 1);
  108.     if (!thePict) goto bail;
  109.  
  110.     // use the PICT Preview Component to display the preview
  111.     if (ci = OpenDefaultComponent(ShowFilePreviewComponentType, 'PICT')) {
  112.         PreviewShowData(ci, 'PICT', thePict, inHere);
  113.         CloseComponent(ci);
  114.     }
  115.  
  116. bail:
  117.     if (resRef) CloseResFile(resRef);
  118.     UseResFile(saveRes);
  119.     return err;
  120. }
  121.  
  122.  
  123.